/**
 * @author: 杰
 * @date: 2023/11/21 9:29
 * 复写零：
 * <a href="https://leetcode.cn/problems/duplicate-zeros/description/">...</a>
 */
public class duplicateZeros {
    public static void solution(int[] arr) {
        //定义len用来判断此时容量是否已经满
        int len = 0;
        //用count来记录下标，
        int count = 0;
        //找到最后一个元素的位置
        while (true) {
            if(arr[count] == 0) {
                len += 2;
            } else {
                len++;
            }
            if (len >= arr.length) {
                break;
            }
            count++;
        }
        /*判断是否出现溢出情况，出现一处情况只有一种可能，那就是count指向的元素为0，
        所以将最后一个元素的值赋值为0然后指针移动到倒数第二个元素
         */
        if (len == arr.length + 1) {
            arr[len - 2] = 0;
            --count;
            len -= 3;
        }
        //开始复写
        while (count >= 0) {
            if (arr[count] != 0) {
                arr[len] = arr[count];
                len--;
            } else {
                arr[len] = 0;
                --len;
                arr[len] = 0;
                --len;
            }
            count--;
        }
    }

    public static void main(String[] args) {
        solution(new int[] {1,0,2,3,0,4,5,0});
    }
}
